<?php


namespace XinYaTable\Forms\Controllers;

use XinYaTable\Forms\Requests\FormFilterGroupRequest;
use XinYaTable\Forms\Services\FormFilterGroupService;
use Illuminate\Http\Request;

class FormFilterGroupController extends BaseController
{
    public $exceptAllAction = true;
    
    /**
     * @var FormFilterGroupService
     */
    private $_formFilterGroupService;

    /**
     * @apiDefine filterGroup 自定义筛选
     */

    /**
     * FormFilterGroupController constructor.
     *
     * @param FormFilterGroupService $formFilterGroupService
     */
    public function __construct(FormFilterGroupService $formFilterGroupService)
    {
        $this->_formFilterGroupService = $formFilterGroupService;
    }

    /**
     * @apiVersion v1.0.0
     * @api        {get} /api/forms/{id}/filter 获取用户自定义筛选 GET
     * @apiName    getUserFilterGroup
     * @apiGroup   filterGroup
     * @apiParam {Number} id 表单id，参数在url上传值
     * @apiSuccessExample {JSON} 结果描述
     * {
     *      "code": 0,
     *      "msg": "请求成功。",
     *      "data": [
     *          {
     *              "id": 10,
     *              "form_id": 1,//表单id
     *              "can_edit": 0,//是否可编辑
     *              "is_system": 1,//是否是系统预设不可删除
     *              "title": "筛选厦门",//筛选标题
     *              "order": 1,//排序
     *              "conditions": [//筛选条件
     *                  {
     *                      "id": 5,
     *                      "field_name": "name",//字段名称
     *                      "field_type": "text",//字段类型
     *                      "type": 1,//查询值type 查询条件: 1 等于 2 不等于 3 包含 4 不包含 5 起始字符 6 大于 7 大于等于 8 小于 9 小于等于 10
     *                      今天(value值为空) 11 昨天(value值为空) 12 本月(value值为空) 13 上月(value值为空) 14 今年(value值为空) 15
     *                      去年(value值为空) 16 过去多少天内 17 过去多少天前 18 在未来多少天内 19 在未来多少天前 20 在指定多少天后  21在指定多少天前 22为空 23 包括 24
     *                      不为空 25 区间查询(值类型为以逗号隔开的两个时间戳拼成的字符串)
     *                      "value": "厦门"//查询值
     *                  },{.....}
     *              ]
     *         },{....}
     *      ]
     * }
     */
    /**
     * @param Request $request
     * @param int     $formId
     *
     * @return \Illuminate\Support\Collection|mixed
     * @throws \XinYaTable\Forms\Exceptions\FormException
     */
    public function getUserFilterGroup(Request $request, $tableName)
    {
        /** @var \XinYaTable\Forms\Repositories\FormRepository $formRep */
        $formRep = app(\XinYaTable\Forms\Repositories\FormRepository::class);
        $formId  = $formRep->getFormByTableName($tableName, true);
        
        return $this->_formFilterGroupService->getUserFilterGroup(
            $request->user()->id,
            $formId
        );
    }


    /**
     * @apiVersion v1.0.0
     * @api        {post} /api/forms/{id}/filter 创建用户自定义筛选 POST
     * @apiName    createUserFilterGroup
     * @apiGroup   filterGroup
     * @apiParam {Number} id 表单id，参数在url上传值
     * @apiParam {String} title 自定义筛选名称 最长10个字符
     * @apiParam {String} order 自定义筛选排序
     * @apiParam {Array} conditions 自定义筛选条件
     * @apiSuccessExample {JSON} 参数描述
     * {
     *              "title": "筛选厦门",//筛选标题
     *              "order": 1,//排序
     *              "conditions": [//筛选条件
     *                  {
     *                      "field_name": "name",//字段名称
     *                      "field_type": "text",//字段类型
     *                      "type": 1,//查询值type 查询条件: 1 等于 2 不等于 3 包含 4 不包含 5 起始字符 6 大于 7 大于等于 8 小于 9 小于等于 10
     *                      今天(value值为空) 11 昨天(value值为空) 12 本月(value值为空) 13 上月(value值为空) 14 今年(value值为空) 15
     *                      去年(value值为空) 16 过去多少天内 17 过去多少天前 18 在未来多少天内 19 在未来多少天前 20 在指定多少天后  21在指定多少天前 22为空 23 包括 24
     *                      不为空 25 区间查询(值类型为以逗号隔开的两个时间戳拼成的字符串)
     *                      "value": "厦门"//查询值
     *                  },{.....}
     *              ]
     * }
     * @apiSuccessExample {JSON} 结果描述
     * {
     *      "code": 0,
     *      "msg": "请求成功。",
     *      "data": [
     *          {
     *              "id": 10,
     *              "form_id": 1,//表单id
     *              "can_edit": 0,//是否可编辑
     *              "is_system": 1,//是否是系统预设不可删除
     *              "title": "筛选厦门",//筛选标题
     *              "order": 1,//排序
     *              "conditions": [//筛选条件
     *                  {
     *                      "id": 5,
     *                      "field_name": "name",//字段名称
     *                      "field_type": "text",//字段类型
     *                      "type": 1,//查询值type 查询条件: 1 等于 2 不等于 3 包含 4 不包含 5 起始字符 6 大于 7 大于等于 8 小于 9 小于等于 10
     *                      今天(value值为空) 11 昨天(value值为空) 12 本月(value值为空) 13 上月(value值为空) 14 今年(value值为空) 15
     *                      去年(value值为空) 16 过去多少天内 17 过去多少天前 18 在未来多少天内 19 在未来多少天前 20 在指定多少天后  21在指定多少天前 22为空 23 包括 24
     *                      不为空 25 区间查询(值类型为以逗号隔开的两个时间戳拼成的字符串)
     *                      "value": "厦门"//查询值
     *                  },{.....}
     *              ]
     *         },{....}
     *      ]
     * }
     */
    /**
     * @param FormFilterGroupRequest $request
     * @param string                 $tableName
     *
     * @return \XinYaTable\Forms\Models\EloquentFormFilterGroup
     * @throws \XinYaTable\Forms\Exceptions\FormException
     */
    public function createUserFilterGroup(FormFilterGroupRequest $request, $tableName)
    {
        return $this->_formFilterGroupService->createUserFilterGroup(
            $request->all(),
            $tableName,
            $request->user()->id
        );
    }

    /**
     * @apiVersion v1.0.0
     * @api        {delete} /api/forms/filter/{id} 删除用户自定义筛选 DELETE
     * @apiName    deleteUserFilterGroup
     * @apiGroup   filterGroup
     * @apiParam {Number} id 自定义筛选id
     * @apiSuccessExample {JSON} 结果描述
     * {
     *      "code": 0,
     *      "msg": "请求成功。",
     *      "data": {}
     * }
     */
    /**
     * @param Request $request
     * @param int     $id
     *
     * @return \Illuminate\Support\Collection|mixed
     * @throws \XinYaTable\Forms\Exceptions\FormException
     */
    public function deleteUserFilterGroup(Request $request, int $id)
    {
        return $this->_formFilterGroupService->deleteUserFilterGroup($id, $request->user()->id);
    }


    /**
     * @apiVersion v1.0.0
     * @api        {put} /api/forms/filter/{id} 修改用户自定义筛选 PUT
     * @apiName    updateUserFilterGroup
     * @apiGroup   filterGroup
     * @apiParam {Number} id 自定义筛选id，参数在url上传值
     * @apiParam {String} [title] 自定义筛选名称 最长10个字符
     * @apiParam {Array} [conditions] 自定义筛选条件
     * @apiSuccessExample {JSON} 参数描述
     * {
     *              "title": "筛选厦门",//筛选标题
     *              "conditions": [//筛选条件
     *                  {
     *                      "field_name": "name",//字段名称
     *                      "field_type": "text",//字段类型
     *                      "type": 1,//查询值type 查询条件: 1 等于 2 不等于 3 包含 4 不包含 5 起始字符 6 大于 7 大于等于 8 小于 9 小于等于 10
     *                      今天(value值为空) 11 昨天(value值为空) 12 本月(value值为空) 13 上月(value值为空) 14 今年(value值为空) 15
     *                      去年(value值为空) 16 过去多少天内 17 过去多少天前 18 在未来多少天内 19 在未来多少天前 20 在指定多少天后  21在指定多少天前 22为空 23 包括 24
     *                      不为空 25 区间查询(值类型为以逗号隔开的两个时间戳拼成的字符串)
     *                      "value": "厦门"//查询值
     *                  },{.....}
     *              ]
     * }
     * @apiSuccessExample {JSON} 结果描述
     * {
     *      "code": 0,
     *      "msg": "请求成功。",
     *      "data": [
     *          {
     *              "id": 10,
     *              "form_id": 1,//表单id
     *              "can_edit": 0,//是否可编辑
     *              "is_system": 1,//是否是系统预设不可删除
     *              "title": "筛选厦门",//筛选标题
     *              "order": 1,//排序
     *              "conditions": [//筛选条件
     *                  {
     *                      "id": 5,
     *                      "field_name": "name",//字段名称
     *                      "field_type": "text",//字段类型
     *                      "type": 1,//查询值type 查询条件: 1 等于 2 不等于 3 包含 4 不包含 5 起始字符 6 大于 7 大于等于 8 小于 9 小于等于 10
     *                      今天(value值为空) 11 昨天(value值为空) 12 本月(value值为空) 13 上月(value值为空) 14 今年(value值为空) 15
     *                      去年(value值为空) 16 过去多少天内 17 过去多少天前 18 在未来多少天内 19 在未来多少天前 20 在指定多少天后  21在指定多少天前 22为空 23 包括 24
     *                      不为空 25 区间查询(值类型为以逗号隔开的两个时间戳拼成的字符串)
     *                      "value": "厦门"//查询值
     *                  },{.....}
     *              ]
     *         },{....}
     *      ]
     * }
     */
    /**
     * @param FormFilterGroupRequest $request
     * @param int                    $id
     *
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|null|object
     * @throws \XinYaTable\Forms\Exceptions\FormException
     */
    public function updateUserFilterGroup(FormFilterGroupRequest $request, int $id)
    {
        return $this->_formFilterGroupService->updateUserFilterGroup(
            $request->all(),
            $id,
            $request->user()->id
        );
    }


}